//
//  MainViewController.swift
//  LVWeibo
//
//  Created by lv on 15/6/23.
//  Copyright © 2015年 lv. All rights reserved.
//

import UIKit

class MainViewController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 获取自定义tabBar
        let tb = MainTabBar()
        // 使用KVC设置自定义的tabbar控制器
        setValue(tb, forKey: "tabBar")
        
        // 设置点击事件
        tb.composeButton.addTarget(self, action: "composeButtonClick", forControlEvents: UIControlEvents.TouchUpInside)
        
        // 执行添加操作
        addChildViewControllers()
        
        // 注：这里输出tabBar.items为nil
        // print(tabBar.items)
    }
    
    // MARK:- 撰写按钮点击事件
    func composeButtonClick() {
        print(__FUNCTION__)
        
        // modal 出ComposeViewController
        presentViewController(UINavigationController(rootViewController: ComposeViewController()), animated: true, completion: nil)
    }
    
    ///  添加所有的子控制器
    private func addChildViewControllers() {
        
        // 从JSON文件中加载控制器的配置信息
        let path = NSBundle.mainBundle().pathForResource("MainVcControllers.json", ofType: nil)
        let data = NSData(contentsOfFile: path!)!
        do{
            // 反序列化
            let array = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments)
        
            // 遍历数组，必须指明数组中的包含的对象，包括字典中的格式
            for dict in array as! [[String:String]]{
            addChildViewController(dict["VcName"]!, title: dict["title"]!, imageName: dict["imageName"]!)
            }
        }catch{
            // 捕获异常
            print(error)
            // 当在json文件中加载出错后执行的代码：
            addChildViewController("HomeTableViewController", title:"首页", imageName: "tabbar_home")
            addChildViewController("MessageTableViewController", title:"消息", imageName: "tabbar_message_center")
            addChildViewController("DiscoverTableViewController", title:"发现", imageName: "tabbar_discover")
            addChildViewController("ProfileTableViewController", title:"我", imageName: "tabbar_profile")
        }
    }
    
    ///  添加控制器
    ///
    ///  :param: vc        子控制器
    ///  :param: title     标题
    ///  :param: imageName 图标名称
    private func addChildViewController(VcName:String,title:String,imageName:String) {
        
        // 设置tint颜色(tabbar·Item 图片和文字的颜色)
        tabBar.tintColor = UIColor.orangeColor()
        
        // 获取命名空间（默认是项目名称）
        let nameSpace = NSBundle.mainBundle().infoDictionary!["CFBundleExecutable"] as! String
        
        // 将字符串转换成类
        // 告诉编译器，类型暂时为anyClass
        let vcClass:AnyClass = NSClassFromString(nameSpace + "." + VcName)!
        
        // 实例化对象，所有的视图控制器都继承UIViewController
        let vc = vcClass.new() as! UIViewController
        
        // 设置标题
        vc.title = title
        
        // 设置tabbarItem不同状态下的图片
        vc.tabBarItem.image = UIImage(named: imageName)
        vc.tabBarItem.selectedImage = UIImage(named: imageName + "_highlighted")
        
        // 创建nav控制器并设置根控制器
        let nav = UINavigationController(rootViewController: vc)
        
        // 将nav控制器添加到tabbar控制器中
        addChildViewController(nav)
    }
}
